//
// ArchiveStrategy.cpp
//
// $Id: //poco/1.4/Foundation/src/ArchiveStrategy.cpp#1 $
//
// Library: Foundation
// Package: Logging
// Module:  FileChannel
//
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
//


#include "Poco/ArchiveStrategy.h"
#include "Poco/Format.h"
#include "Poco/File.h"
#include "Poco/Path.h"
#include "Poco/Exception.h"
#include <fstream>


namespace Poco {


//
// ArchiveCompressor
//


// class ArchiveCompressor
// {
// public:
// 	ArchiveCompressor():
// 		compress(this, &ArchiveCompressor::compressImpl)
// 	{
// 	}
// 	
// 	~ArchiveCompressor()
// 	{
// 	}
// 	
// protected:
// 	Void compressImpl(const std::string& path)
// 	{
// 		std::string gzPath(path);
// 		gzPath.append(".gz");
// 		istream istr(path, std::ios::binary | std::ios::in);
// 		if (!istr.good()) throw OpenFileException(path);
// 		FileOutputStream ostr(gzPath, std::ios::binary | std::ios::out);
// 		if (ostr.good())
// 		{
// 			DeflatingOutputStream deflater(ostr, DeflatingStreamBuf::STREAM_GZIP);
// 			StreamCopier::copyStream(istr, deflater);
// 			deflater.close();
// 			ostr.close();
// 			istr.close();
// 			File f(path);
// 			f.remove();
// 		}
// 		else throw CreateFileException(gzPath);
// 		return Void();
// 	}
// };


//
// ArchiveStrategy
//


ArchiveStrategy::ArchiveStrategy():
m_compress(false)
{
}


ArchiveStrategy::~ArchiveStrategy()
{

}


void ArchiveStrategy::compress(bool flag)
{
	m_compress = flag;
}


void ArchiveStrategy::moveFile(const std::string& oldPath, const std::string& newPath)
{
	File f(oldPath);
	
	f.renameTo(newPath);
}


bool ArchiveStrategy::exists(const std::string& name)
{
	File f(name);
	if (f.exists())
	{
		return true;
	}
	return false;
}


//
// ArchiveByNumberStrategy
//


ArchiveByNumberStrategy::ArchiveByNumberStrategy()
{
}


ArchiveByNumberStrategy::~ArchiveByNumberStrategy()
{
}


string ArchiveByNumberStrategy::archive(const string& filepath)
{
	int n = -1;
	std::string path;
	do
	{
		path = filepath;
		path.append(".");
		path += format("%d",++n);
	}
	while (exists(path));
	
	moveFile(filepath, path);
	return path;
}


} // namespace Poco
